package mvc.model;

import java.util.ArrayList;
import java.util.List;

public class Palavra {
	
	private String palavra;
	private List<Character> letras = new ArrayList<Character>();
	private List<Boolean> letrasFlag = new ArrayList<Boolean>();
	private int acertosPorJogada=0;
	
	public int getAcertosPorJogada() {
		return acertosPorJogada;
	}

	public void setAcertosPorJogada(int acertosPorJogada) {
		this.acertosPorJogada = acertosPorJogada;
	}
    
	public Palavra(String palavra){
		this.palavra = palavra;
		for (int i = 0; i < this.palavra.length(); i++) {
			this.letras.add(this.palavra.toUpperCase().charAt(i));
			this.letrasFlag.add(true);
		}
	}

	
	public boolean getFechouPalavra() {
		for (Boolean flag : letrasFlag) {
			if (flag.booleanValue())
				return false;
		}
		return true;
	}

	public String getPal(Palavra pal){
		return pal.palavra.toUpperCase();
	}
	
	public String getPalavra(Palavra pal) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < pal.letras.size(); i++){
			if (pal.letrasFlag.get(i).booleanValue()){
				sb.append("_ ");
			} else{
				sb.append(pal.letras.get(i) + " ");
			}
		}
		return sb.toString();
	}

	public void setPalavra(String palavra) {
		this.palavra = palavra;
	}

	public List<Character> getLetras() {
		return letras;
	}

	public void setLetras(List<Character> letras) {
		this.letras = letras;
	}

	public List<Boolean> getFlagLetras() {
		return letrasFlag;
	}

	public void setFlagLetras(List<Boolean> flagLetras) {
		this.letrasFlag = flagLetras;
	}
	

	public Boolean procuraLetraNaPalavra(Character letraInformada, Palavra palavraObj) {
		boolean retorno = false;
		letraInformada = Character.toUpperCase(letraInformada.charValue());
		for (int i = 0; i < palavraObj.letras.size(); i++) {
			Character letraExtraida = palavraObj.letras.get(i);
			if (letraInformada.equals(letraExtraida)){
				palavraObj.letrasFlag.set(i, false);
				acertosPorJogada++;
				retorno = true;
			}
		}
		return retorno;
	}
	
	
	
}
